package com.atguigu.bigdata.scala.chapter06

object Scala13_Object_Interface_5 {

    def main(args: Array[String]): Unit = {

        // TODO 特质

        // Java为什么不能多继承？
        // 钻石问题
        // Scala中特质其实就存在钻石问题，scala采用了一种功能叠加的方式来解决
        // 这里的功能叠加有叠加顺序。
        // 类混入特质，其实目的就在于功能的扩展（叠加）

        val mysql = new MySQL()
        mysql.oper()
    }
    trait Operate {
        def oper(): Unit = {
            println("操作数据")
        }
    }
    trait DB extends Operate {
        override def oper(): Unit = {
            print("向数据库中")
            super.oper()
        }
    }
    trait Log extends Operate {
        override def oper(): Unit = {
            print("向日志文件中")
            //super[Operate].oper()
            super.oper()
        }
    }
    // 向日志文件中向数据库中操作数据
    //class MySQL extends DB with Log {
    // 向数据库中向日志文件中操作数据
    class MySQL extends Log with DB {

        // 特质中的super关键字不是表示上一级特质对象，而是上一个特质对象

    }

//    trait T1 {
//        def test(): Unit = {
//
//        }
//    }
//    trait T2 {
//        def test(): Unit = {
//
//        }
//    }
//
//    class User extends T1 with T2 {
//
//    }
}
